인증과 인가

쿠버네티스에서 인증(Authentication)은 사용자나 서비스의 신원을 확인하는 과정이며, 인가(Authorization)는 인증된 사용자가 어떤 작업을 수행할 수 있는지 결정하는 과정입니다.

인증 메커니즘

인증서 관리

인증서 생성 예시

# 개인 키 생성
openssl genrsa -out developer.key 2048

# CSR(Certificate Signing Request) 생성
openssl req -new -key developer.key -out developer.csr -subj "/CN=developer/O=development"

# 쿠버네티스 CA로 인증서 서명
sudo openssl x509 -req -in developer.csr \
  -CA /etc/kubernetes/pki/ca.crt \
  -CAkey /etc/kubernetes/pki/ca.key \
  -CAcreateserial \
  -out developer.crt -days 365

인증서 확인

# 인증서 내용 확인
openssl x509 -in developer.crt -text -noout

# 클러스터 인증서 만료일 확인
kubeadm certs check-expiration

kubeconfig 파일 구성

kubeconfig 파일은 클러스터, 사용자, 컨텍스트 정보를 포함하여 kubectl이 API 서버와 통신하는 방법을 정의합니다.

kubeconfig 구조

apiVersion: v1
kind: Config
clusters:
- name: kubernetes
  cluster:
    server: https://kubernetes.example.com:6443
    certificate-authority-data: BASE64_ENCODED_CA_CERT
users:
- name: developer
  user:
    client-certificate-data: BASE64_ENCODED_CLIENT_CERT
    client-key-data: BASE64_ENCODED_CLIENT_KEY
contexts:
- name: developer@kubernetes
  context:
    cluster: kubernetes
    user: developer
    namespace: development
current-context: developer@kubernetes

kubeconfig 관리 명령어

# 현재 컨텍스트 확인
kubectl config current-context

# 컨텍스트 변경
kubectl config use-context developer@kubernetes

# 새 클러스터 추가
kubectl config set-cluster production --server=https://k8s-prod.example.com:6443

# 새 사용자 추가
kubectl config set-credentials developer --client-certificate=developer.crt --client-key=developer.key

# 새 컨텍스트 추가
kubectl config set-context dev --cluster=kubernetes --user=developer --namespace=development

인가 (RBAC)

Role-Based Access Control(RBAC)은 쿠버네티스에서 가장 일반적인 인가 메커니즘으로, 역할과 권한 바인딩을 통해 세밀한 접근 제어를 제공합니다.

RBAC 구성 요소